#include<stdio.h>
#include<unistd.h>
#include <sys/wait.h>
#include <stdlib.h>
#include<errno.h>
#include<string.h>
#define test_num 10
typedef void(*test)();
test tests[test_num];
int  addtest(test test1)
{
  int i = 0;
  for( i = 0;i<test_num;i++)
  {
    if(!tests[i])
      break;
  }
  if(i == test_num)
    return -1;
  tests[i] = test1;
  return 0;
}
void test1()
{
  printf("这是一个打印任务\n");
}
void test2()
{
  printf("这是一个输出任务\n");
}
void test3()
{
  printf("这是一个图形化界面任务\n");
}
void inittest()
{int i =0;
  for( i = 0;i<test_num;i++)
  {
    tests[i] = NULL;
  }
  addtest(test1);
  addtest(test2);
  addtest(test3);
}
int main()
{
  pid_t id = fork();
  if(id == 0)
  {
    int cnt  = 5;
    while(cnt)
    {
    printf("我是子进程，我的pid是%d,我的ppid是%d\n",getpid(),getppid());
    cnt--;
    sleep(1);
   //.autorelabelint  i = 1;
  //.autorelabel i/=0;
    }
    exit(1);
  }
  else if(id>0)
  {
    int status = 0;
    int cnt  = 10;
    while(cnt)
    {

      int i = 0;
    printf("我是父进程，我的pid是%d,我的ppid是%d\n",getpid(),getppid());
    cnt--;
    sleep(1);
    inittest();
    for(i = 0;i<test_num;i++)
    {
      tests[i]();
    }
    }
  }
//int ret = waitpid(-1,&status,WNOHANG);
//while(1)
//{
//  if(ret ==0)
//  {
//    printf("正在等待进程\n");
//  }
//  if(ret >0)
//  {
//    printf("进程已等到\n");
//break;
//  }
//  if(ret<0)
//  {
//    printf("进程没等到\n");
//    break;
//  }
//}
//    }
//if(status&0x7F)
//{
//  printf("程序没有成功运行完:%d",status&0x7F);
//}
//if((status>>8)&0xFF)
//{
//  printf("程序结果错误:%d",(status>>8)&0xFF);
//}
//printf("error:%d:%s",errno,strerror(errno));
//  }
//  else
//  {
//    printf("出错了");
//  }
  return 0;
}
